package moduloRemoto.bo;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import moduloRemoto.bo.interfaces.ProjetoRemote;
import moduloRemoto.dao.interfaces.ServerLocal;
import moduloRemoto.pojo.Projeto;

import org.jboss.annotation.ejb.RemoteBinding;

@Stateless
@Remote(ProjetoRemote.class)
@RemoteBinding(jndiBinding="ejb/projeto")
public class ProjetoBO implements ProjetoRemote
{
	@EJB 
	private ServerLocal dao;


	@Override
	public Projeto persistir(Projeto objPro)
	{
		if (objPro == null)
			return null;

		try
		{
			if (objPro.getIdPro() > 0)
				objPro = dao.update(objPro);
			else
			{
				objPro.setCodigoPro(gerarProximoCodigo());
				objPro = dao.insert(objPro);	
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}

		return objPro;
	}

	@Override
	public Boolean excluir(int idPro)
	{
		if (idPro <= 0)
			return false;
		
		try
		{
			Projeto objPro = this.carregarObjeto(idPro);

			if (objPro != null)
				dao.remove(objPro);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return false;
		}
		
		return true;
	}

	@Override
	public Projeto carregarObjeto(int idPro)
	{
		if (idPro <= 0)
			return null;
		
		Projeto objPro = null;
		
		try
		{
			objPro = dao.find(Projeto.class, idPro);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		return objPro;
	}

	@Override
	public  List<Projeto> carregarListaProjetos()
	{
		List<Projeto> listaPro = new ArrayList<Projeto>();
		
		try
		{
			for (Object objeto : dao.executeQuery("SELECT p FROM Projeto p"))
				listaPro.add((Projeto)objeto);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

		return listaPro;
	}

	private String gerarProximoCodigo()
	{
		try
		{
			Calendar cal = new GregorianCalendar();
			String maiorCodigo = "0/" + cal.get(Calendar.YEAR);
			
			for (Object objeto : dao.executeQuery("SELECT p.codigoPro FROM Projeto p ORDER BY p.codigoPro DESC"))
			{
				maiorCodigo = (String)objeto;
				break;
			}
			
			String [] temp = null;
			temp = maiorCodigo.split("/");
			
			int proxCodigo = Integer.parseInt(temp[0]) + 1;
			
			return String.format("%05d", proxCodigo) + "/" + cal.get(Calendar.YEAR);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		return null;
	}
}